const fs = require('fs');
const path = require('path');

/**
 * 从文本文件读取配置，如果失败则使用默认值
 */
function loadServerConfig(configFilePath) {
    // 默认配置值
    const defaultConfig = {
        deviceIndex: '3',
        logLevel: 'info'
    };

    // 如果未指定路径，使用默认路径
    const resolvedPath = configFilePath || path.join(__dirname, 'server_input.txt');

    try {
        // 检查文件是否存在
        if (!fs.existsSync(resolvedPath)) {
            console.warn(`[WARNING] Config file not found at ${resolvedPath}, using defaults`);
            return defaultConfig;
        }

        // 读取文件内容
        const content = fs.readFileSync(resolvedPath, 'utf8').trim();
        const lines = content.split('\n').map(line => line.trim());

        // 验证内容格式
        if (lines.length < 2) {
            throw new Error(`File format incorrect. Expected at least 2 lines, got ${lines.length}`);
        }

        // 提取配置值
        const deviceIndex = lines[0];
        const logLevel = lines[1];

        // 验证设备索引格式
        if (!/^\d+$/.test(deviceIndex)) {
            throw new Error(`Invalid device index format: "${deviceIndex}". Expected a number.`);
        }

        // 验证日志级别
        const validLogLevels = ['debug', 'info'];
        // const validLogLevels = ['debug', 'info', 'warn', 'error'];
        if (!validLogLevels.includes(logLevel.toLowerCase())) {
            throw new Error(`Invalid log level: "${logLevel}". Valid levels: ${validLogLevels.join(', ')}`);
        }

        console.log('[SUCCESS] Config loaded from file successfully');
        return { deviceIndex, logLevel };

    } catch (error) {
        console.error(`[ERROR] Failed to load config: ${error.message}. Using default values.`);
        return defaultConfig;
    }
}

/**
 * 创建标准化的配置文件，确保正确的换行符和格式
 */
function createServerInputFile() {
    const configPath = path.join(__dirname, 'server_input.txt');
    // 使用默认配置创建文件
    const defaultConfig = loadServerConfig();

    try {
        // 删除现有文件
        if (fs.existsSync(configPath)) {
            fs.unlinkSync(configPath);
        }

        // 创建标准格式的配置文件，使用统一的换行符
        const content = `${defaultConfig.deviceIndex}\n${defaultConfig.logLevel}\n`;
        fs.writeFileSync(configPath, content, { encoding: 'utf8' });

        console.log('[SUCCESS] Server input file created successfully');
        console.log('[INFO] Device index:', defaultConfig.deviceIndex);
        console.log('[INFO] Log level:', defaultConfig.logLevel);

        return true;
    } catch (error) {
        console.error('[ERROR] Failed to create server input file:', error.message);
        return false;
    }
}

// 如果直接运行此脚本，则创建配置文件并演示加载
if (require.main === module) {
    createServerInputFile();
    // 演示加载配置
    const config = loadServerConfig();
    console.log('[CONFIG] Final configuration:', config);
}

module.exports = { createServerInputFile, loadServerConfig };
